/* Creado el  17/04/2006 */
package com.angel.arquitectura.model.common;

import org.hibernate.CallbackException;
import org.hibernate.Session;
import org.hibernate.classic.ValidationFailure;

import java.io.Serializable;
import java.util.Date;

/**
 *  Esta es la clase persistente de las cuales deberian extender todas las clases de negocio que 
 * pertenecen al modelo viejos pero que son utilizadas por el modelo nuevo y que ademas deberian 
 * ser persistentes.
 *  Todas las clases que extiendan de esta clase, deberian en algun momento ser pasadas al modelo
 * nuevo de SAE
 * 
 *  Persistent: vincula las clases del modelo nuevo con el viejo.
 * 
 * @author ALeinvand
 * @version $Revision: 1.8 $
 */
public abstract class PersistentObjectOldModel implements Persistent {

    private Long version;
    private Date fechaCreacion= new Date();
    private Date fechaModificacion;
    private boolean isSynchronizing= false;  
    
    /**
     * METODO SOBRESCRITO: COMENTARIO AQUI.
     * 
     * @see org.hibernate.classic.Lifecycle#onSave(org.hibernate.Session)
     */
    public boolean onSave(Session arg0) throws CallbackException {
        return NO_VETO;
    }

    /**
     * METODO SOBRESCRITO: COMENTARIO AQUI.
     * 
     * @see org.hibernate.classic.Lifecycle#onUpdate(org.hibernate.Session)
     */
    public boolean onUpdate(Session arg0) throws CallbackException {
        return NO_VETO;
    }

    /**
     * METODO SOBRESCRITO: COMENTARIO AQUI.
     * 
     * @see org.hibernate.classic.Lifecycle#onDelete(org.hibernate.Session)
     */
    public boolean onDelete(Session arg0) throws CallbackException {
        return NO_VETO;
    }

    /**
     * METODO SOBRESCRITO: COMENTARIO AQUI.
     * 
     * @see org.hibernate.classic.Lifecycle#onLoad(org.hibernate.Session, java.io.Serializable)
     */
    public void onLoad(Session arg0, Serializable arg1) {}

    /**
     * METODO SOBRESCRITO: COMENTARIO AQUI.
     * 
     * @see org.hibernate.classic.Validatable#validate()
     */
    public void validate() throws ValidationFailure {
        // HACER Metodo Auto-generado por Eclipse.
    }
    
    public final void synchronizedState() {
        if(!isSynchronizing){
            //si no esta sincronizando
            this.sincronizar();
            isSynchronizing=false;
        }
    }
    
    /**
     * METODO SOBRESCRITO
     * @see com.angel.arquitectura.model.common.Synchronizable#synchronizedState()
     */
    public void sincronizar() {
        // nothing to do...
        
    }
    
    
//////////////////////////////////////////////////////////////////////////////////////
////  GETTERS AND SETTERS  ///////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

    /**
     * @hibernate.version type="long" unsaved-value="null"
     */
    public Long getVersion() {
        return version;
    }
    public void setVersion(Long version) {
        this.version = version;
    }

    /**
     * @hibernate.property
     */
    public Date getFechaCreacion() {
        return fechaCreacion;
    }
    private void setFechaCreacion(Date fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }

    /**
     * @hibernate.property
     */
    public Date getFechaModificacion() {
        return fechaModificacion;
    }
    public void setFechaModificacion(Date fechaModificacion) {
        this.fechaModificacion = fechaModificacion;
    }
   
}